"""
配置文件 - ResNeXt 图像分类训练监控平台
"""
import os

class Config:
    """基础配置类"""
    # Flask应用密钥，用于会话加密和安全功能，生产环境中应从环境变量获取
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'your-very-secret-key-change-in-production'
    
    # 上传文件存储目录，用于保存用户上传的JSON训练/验证数据文件
    UPLOAD_FOLDER = 'uploads'
    
    # 模型文件存储目录，用于保存训练完成的模型文件(.pth)和标签文件(.json)
    MODEL_FOLDER = 'models'
    
    # 文件大小限制配置
    MAX_JSON_FILE_SIZE = 10 * 1024 * 1024  # JSON数据文件最大大小限制：10MB，防止过大文件占用内存
    MAX_MODEL_FILE_SIZE = 100 * 1024 * 1024  # 模型ZIP包最大大小限制：100MB，防止上传过大模型文件
    
    # 深度学习训练相关配置
    DEFAULT_BATCH_SIZE = 16  # 默认批次大小，每次训练处理的图片数量，影响内存使用和训练速度
    DEFAULT_NUM_EPOCHS = 5  # 默认训练轮次，完整遍历训练数据集的次数，影响训练时间和模型效果
    DEFAULT_LEARNING_RATE = 0.001  # 默认学习率，控制模型参数更新的步长，过大会震荡，过小会收敛慢
    DEFAULT_MOMENTUM = 0.9  # 默认动量参数，SGD优化器的动量系数，帮助跳出局部最优
    DEFAULT_NUM_WORKERS = 2  # 数据加载器工作进程数，减少数量可避免内存问题，但会影响数据加载速度
    
    # 网络请求相关配置
    IMAGE_DOWNLOAD_TIMEOUT = 15  # 图片下载超时时间(秒)，防止网络慢时长时间等待
    IMAGE_DOWNLOAD_RETRIES = 3  # 图片下载失败重试次数，提高网络不稳定时的成功率
    
    # 计算设备配置
    DEVICE_PRIORITY = ['cuda', 'mps', 'cpu']  # 设备使用优先级：CUDA(NVIDIA GPU) > MPS(Apple Silicon) > CPU
    
    # 数据库连接配置
    MYSQL_HOST = 'localhost'  # MySQL服务器地址
    MYSQL_PORT = 3306  # MySQL服务器端口
    MYSQL_USERNAME = 'root'  # MySQL用户名
    MYSQL_PASSWORD = ''  # MySQL密码，默认为空
    MYSQL_DATABASE = 'your_database'  # MySQL数据库名称
    
    # 火山引擎TOS对象存储配置
    TOS_ACCESS_KEY = 'AKLTY2FmZmI5Y2JhYmZmNDc3MmJmOTU3Yjg5Mzk5Y2U2YWM'  # TOS访问密钥ID
    TOS_SECRET_KEY = 'WVRVMVpEVmtOV1V6TWpRME5HWmxZVGxoTURCbU9ISXpNemRtTURNd1lUUQ=='  # TOS秘密访问密钥
    TOS_ENDPOINT = 'tos-cn-guangzhou.ivolces.com'  # TOS服务端点
    TOS_REGION = 'cn-guangzhou'  # TOS区域
    TOS_BUCKET = 'dcp-upload-pro'  # 默认存储桶名称

class DevelopmentConfig(Config):
    """开发环境配置 - 用于本地开发和调试"""
    DEBUG = True  # 启用调试模式，显示详细错误信息，自动重载代码变更
    
class ProductionConfig(Config):
    """生产环境配置 - 用于正式部署"""
    DEBUG = False  # 关闭调试模式，隐藏敏感错误信息，提高安全性和性能
    
    # 生产环境安全配置
    SECRET_KEY = os.environ.get('SECRET_KEY', 'change-this-secret-key-in-production')
    
    # 生产环境性能优化
    DEFAULT_NUM_WORKERS = 4  # 生产环境增加工作进程数
    
# 配置字典 - 根据环境变量选择对应的配置类
config = {
    'development': DevelopmentConfig,  # 开发环境配置
    'production': ProductionConfig,    # 生产环境配置
    'default': ProductionConfig        # 默认使用生产环境配置（安全优先）
}

# 获取当前配置类
def get_config():
    """根据环境变量获取配置类"""
    env = os.environ.get('FLASK_ENV', 'production')
    return config.get(env, config['production'])

# 环境变量控制说明：
# FLASK_ENV=development  # 启用开发模式（debug=True，支持代码重载）
# FLASK_ENV=production   # 启用生产模式（debug=False，禁用代码重载）
# 不设置环境变量时默认为生产模式
